package m202406.d08;

/**
 * @@author: 爱做梦的锤子
 * @date: 2024/6/8 22:15
 */

/**
 * I             1
 * V             5
 * X             10
 * L             50
 * C             100
 * D             500
 * M             1000
 * <p>
 * I 可以放在 V (5) 和 X (10) 的左边，来表示 4 和 9。
 * X 可以放在 L (50) 和 C (100) 的左边，来表示 40 和 90。
 * C 可以放在 D (500) 和 M (1000) 的左边，来表示 400 和 900
 */
public class Q13 {

    public static void main(String[] args) {

    }

    public int romanToInt(String s) {
        int res = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            switch (c) {
                case 'I':
                    int next = getNext(s, i, 'V', 'X', 5, 10);
                    if (next > 0) {
                        res = res + next - 1;
                        i++;
                    } else {
                        res = res + 1;
                    }
                    break;
                case 'V':
                    res = res + 5;
                    break;
                case 'X':
                    int next2 = getNext(s, i, 'L', 'C', 50, 100);
                    if (next2 > 0) {
                        res = res + next2 - 10;
                        i++;
                    } else {
                        res = res + 10;
                    }
                    break;
                case 'L':
                    res = res + 50;
                    break;
                case 'C':
                    int next3 = getNext(s, i, 'D', 'M', 500, 1000);
                    if (next3 > 0) {
                        res = res + next3 - 100;
                        i++;
                    } else {
                        res = res + 100;
                    }
                    break;
                case 'D':
                    res = res + 500;
                    break;
                case 'M':
                    res = res + 1000;
                    break;
                default:
                    break;
            }
        }
        return res;
    }

    private int getNext(String s, int i, char c1, char c2, int i1, int i2) {
        if (i + 1 >= s.length()) {
            return 0;
        }
        char c = s.charAt(i + 1);
        if (c == c1) {
            return i1;
        }
        if (c == c2) {
            return i2;
        }
        return 0;
    }
}
